package com.cz.nongyetongv5.activity;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.cz.nongyetongv5.DBManager.DBManager;
import com.cz.nongyetongv5.R;
import com.cz.nongyetongv5.adapter.WelcomePageAdapter;
import com.cz.nongyetongv5.adapter.config.CommonConstants;
import com.cz.nongyetongv5.adapter.dao.DatabaseHelper;
import com.cz.nongyetongv5.custom.dialog.CustomDialog;
import com.cz.nongyetongv5.utils.ConfigUtil;
import com.cz.nongyetongv5.utils.DialogUtil;
import com.cz.nongyetongv5.utils.DownloadDataUtil;
import com.cz.nongyetongv5.utils.ImageUtil;
import com.cz.nongyetongv5.utils.InitDataUtil;
import com.cz.nongyetongv5.utils.UpdateDataUtil;

import java.lang.reflect.Field;

@SuppressLint({ "NewApi", "ValidFragment" })
public class GuideActivity extends FragmentActivity implements
		OnPageChangeListener, View.OnClickListener {

	/**
	 * 引导页左右滑动UI
	 */
	private ViewPager guideViewPager = null;

	/**
	 * 数据适配器
	 */
	private WelcomePageAdapter guidePagerAdapter = null;

	/**
	 * 存数数据的SharedPreferences
	 */
	public static SharedPreferences nongYeTongSharedPreferences = null;

	/**
	 * 数据库工具类
	 */
	private DatabaseHelper db = null;

	/**
	 * 下载数据工具类
	 */
	private DownloadDataUtil downloadDataUtil = null;

	/**
	 * 下载等待进度条
	 */
	private CustomDialog downloadWaitDialog = null;

	private DBManager dbHelper;

	private static int[] guideArr;

	/**
	 * 初始化
	 */
	private void init() {

		int guideCount = 0;

		Field[] fields = R.drawable.class.getDeclaredFields();

		for (Field field : fields) {

			if (field.getName().startsWith("guide")) {
				guideCount++;
			}
		}

		guideArr = new int[guideCount];

		for (int i = 0; i < guideArr.length; i++) {
			try {
				guideArr[i] = R.drawable.class.getField("guide" + (i + 1))
						.getInt(null);
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (NoSuchFieldException e) {
				e.printStackTrace();
			}
		}

		guidePagerAdapter = new WelcomePageAdapter(guideArr, this);

		/**
		 * 初始化UI控件
		 */
		guideViewPager = (ViewPager) GuideActivity.this
				.findViewById(R.id.guideViewPager);

		guideViewPager.setAdapter(guidePagerAdapter);

		guideViewPager.setOnPageChangeListener(this);

		/*
		 * 初始化数据对象
		 */
		nongYeTongSharedPreferences = GuideActivity.this.getSharedPreferences(
				CommonConstants.SHARED_REFERENCES_TAG, Context.MODE_PRIVATE);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.guide);

		db = new DatabaseHelper(this, CommonConstants.DBNAME, null,
				CommonConstants.DATABASE_VERSION);
		//复制预先的db3文件到data/data/com.cz.nongyetongv5/databases下
		dbHelper = new DBManager(this);
		dbHelper.openDatabase();
		dbHelper.closeDatabase();

		downloadDataUtil = DownloadDataUtil.getNewInstance();

		// 取得验证名和验证密码
		String validateUsername = new ConfigUtil(getResources())
				.getRestUsername();

		String validatePassword = new ConfigUtil(getResources())
				.getRestPassword();

		downloadDataUtil.setValidateUserName(validateUsername);
		downloadDataUtil.setValidatePassword(validatePassword);

		// 初始化
		init();

	}

	/**
	 * 当ViewPager的滚动条状态发生改变的时候
	 */
	@Override
	public void onPageScrollStateChanged(int arg0) {

	}

	/**
	 * 当当前页面被滑动的时候调用
	 *
	 * @param arg0
	 * @param arg1
	 * @param arg2
	 */
	@Override
	public void onPageScrolled(int arg0, float arg1, int arg2) {
	}

	/**
	 * 当ViewPager的一个新页被选中的时候
	 */
	@Override
	public void onPageSelected(int position) {
	}

	/**
	 * 按钮被点击的时候
	 */
	@Override
	public void onClick(View v) {

		if (!CommonConstants.isNetworkConnected(GuideActivity.this)) {
			DialogUtil.showMessageDialog("系统第一次初始化,请务必连接网络...", null,
					GuideActivity.this);
			return;
		}
		downloadWaitDialog = new CustomDialog(this);
		downloadWaitDialog.setMessage("正在为您第一次使用初始化");

		downloadWaitDialog.setCanceledOnTouchOutside(false);

		downloadWaitDialog.setWidthPercent(0.6F);

		downloadWaitDialog.setTitle(null);

		downloadWaitDialog.setActionTxt(null);

		downloadWaitDialog.setCancleTxt(null);

		downloadWaitDialog.showWait();

		AsyncTask<Integer, Integer, Integer> moveData = new AsyncTask<Integer, Integer, Integer>() {

			@Override
			protected Integer doInBackground(Integer... params) {

				int result = 0;

				try {

					InitDataUtil dataUtil = new InitDataUtil(db,
							GuideActivity.this);

					// /**
					// * 下载所有乡镇
					// */
					//dataUtil.downloadTown();
					//
					// /**
					// * 下载所有检查行业
					// */
					dataUtil.downloadJianChaHangYe();
					//
					// /**
					// * 下载检查内容
					// */
					dataUtil.downloadJianChaNeiRong();
					//
					// /**
					// * 下载被检单位
					// */
					// dataUtil.downloadBeiJianDanWei();
					//
					// /**
					// * 下载检查单位
					// */
					// dataUtil.downloadJianChaDanWei();
					//
					// /**
					// * 下载检查人员
					// */
					// dataUtil.downloadJianChaRenYuan();
					//
					// /**
					// * 下载联系人
					// */
					// dataUtil.downloadLinkMan();
					//
					// /**
					// * 下载任务来源
					// */
					dataUtil.downloadRenWuLaiYuan();
					//
					// /**
					// * 下载检测类别
					// */
					dataUtil.downloadJianCeLeiBie();
					//
					// /**
					// * 下载产品类别
					// */
					dataUtil.downloadChanPinLeiBie();
					//
					// /**
					// * 下载检测方法
					// */
					dataUtil.downloadJianCeFangFa();
					//
					// /**
					// * 下载检验机构
					// */
					// dataUtil.downloadChouYanJiGou(null);
					//
					// /**
					// * 下载检测依据
					// */
					dataUtil.downloadJianCeYiJu();

					// Log.d(TAG, "同步启动成功... 开始同步... ");

					DatabaseHelper db = new DatabaseHelper(GuideActivity.this,
							CommonConstants.DBNAME, null,
							CommonConstants.DATABASE_VERSION);

					UpdateDataUtil dataUtilSyn = new UpdateDataUtil(db,
							GuideActivity.this, null);
					//					dataUtilSyn.add("DUCHAXUNCHA");
					//					dataUtilSyn.add("TOWN");

					final String TAG = "synservice";

					Log.d(TAG, "Town同步完成...");

					//					dataUtilSyn.add("BEIJIANDANWEI");

					//					dataUtilSyn.update("BEIJIANDANWEI");

					//					dataUtilSyn.delete("BEIJIANDANWEI");

					Log.d(TAG, "被检单位同步完成...");

					//					dataUtilSyn.add("JIANCHADANWEI");
					//					dataUtilSyn.update("JIANCHADANWEI");
					//					dataUtilSyn.delete("JIANCHADANWEI");
					Log.d(TAG, "检测单位同步完成...");

					//					dataUtilSyn.add("JIANGUANRENYUAN");
					//					dataUtilSyn.update("JIANGUANRENYUAN");
					//					dataUtilSyn.delete("JIANGUANRENYUAN");
					Log.d(TAG, "监管人员同步完成...");

					//					dataUtilSyn.add("LINKMAN");
					//					dataUtilSyn.update("LINKMAN");
					//					dataUtilSyn.delete("LINKMAN");
					Log.d(TAG, "联系人同步完成...");

					//					dataUtilSyn.add("CHOUYANJIGOU");
					//					dataUtilSyn.update("CHOUYANJIGOU");
					//					dataUtilSyn.delete("CHOUYANJIGOU");
					Log.d(TAG, "抽验机构同步完成...");

					Log.d(TAG, "同步完成!!");

					MainActivity.ISFROMGUIDE = true;

				} catch (Exception e) {

					e.printStackTrace();

					result = -1;
				}

				return result;
			}

			@Override
			protected void onPostExecute(Integer result) {
				if (result == 0) {
					if (downloadWaitDialog != null
							&& downloadWaitDialog.isShowing()) {
						downloadWaitDialog.dismiss();

						// 1. 将信息写入数据,表示程序已经引导过了
						Editor editor = nongYeTongSharedPreferences.edit();
						editor.putBoolean("firstIn", false);
						// 提交
						editor.commit();


						SharedPreferences sharedData = GuideActivity.this
								.getSharedPreferences(
										CommonConstants.SHARED_REFERENCES_REINITDATA,
										Context.MODE_PRIVATE);

						Editor editable = sharedData.edit();

						// 存储已经重新初始化完毕
						editable.putBoolean("isdoreinit", true);

						editable.commit();



						// 2. 数据清理
						Intent intent = new Intent(GuideActivity.this,
								LoginActivity.class);
						GuideActivity.this.startActivity(intent);
						// 销毁第一个启动窗口
						GuideActivity.this.finish();









					}
				} else {

					if (downloadWaitDialog != null
							&& downloadWaitDialog.isShowing()) {
						downloadWaitDialog.dismiss();

						DialogUtil.showMessageDialog(
								getString(R.string.message_softerror),
								new OnClickListener() {

									@Override
									public void onClick(View v) {

										GuideActivity.this.finish();

									}
								}, GuideActivity.this);
					}

				}

			}

		};

		moveData.execute();

	}

	@Override
	public void onBackPressed() {
	}

	/**
	 * 清理资源
	 */
	@Override
	protected void onDestroy() {

		if (db != null) {

			db.close();
		}

		super.onDestroy();
	}

	public static class GuideFragment extends Fragment {

		private int position;

		public GuideFragment(int position) {

			this.position = position;
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container,
								 Bundle savedInstanceState) {

			ViewGroup vgGuideLayout = (ViewGroup) inflater.inflate(
					R.layout.guide_item, container, false);

			ImageView ivImage = (ImageView) vgGuideLayout
					.findViewById(R.id.ivGuide);

			Bitmap bitmap = ImageUtil.decodeSampledBitmapFromResource(
					getResources(), guideArr[position], getActivity()
							.getWindow().getWindowManager().getDefaultDisplay()
							.getWidth() - 600,
					getActivity().getWindow().getWindowManager()
							.getDefaultDisplay().getHeight() - 600);

			ivImage.setImageBitmap(bitmap);

			return vgGuideLayout;
		}
	}
}
